package me.jiatao.baselibrary.utils

import android.content.Context
import android.widget.ImageView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
import com.bumptech.glide.request.RequestOptions
import me.jiatao.baselibrary.R
import me.jiatao.baselibrary.ext.loadWithOptions

/**
 * Glide工具类
 */
object GlideUtils {
    /**
     * Glide 用法
     * https://blog.csdn.net/guolin_blog/article/details/78582548
     *
     * .clear(imageView)取消加载
     * 当你在with方法中传入的Activity或Fragment被销毁的时候，
     * Glide会自动取消加载并且回收所有的加载过程中所使用的资源。
     *
     *
     * .override(Target.SIZE_ORIGINAL); 调整尺寸大小
     * .skipMemoryCache(true); 禁用内存缓存
     * .asBitmap() 静态显示
     * .preload(); 图片预加载
     * .submit(int width, int height) 图片下载

     *  硬盘缓存配置
     *  DiskCacheStrategy.NONE： 表示不缓存任何内容。
     *  DiskCacheStrategy.DATA： 表示只缓存原始图片。
     *  DiskCacheStrategy.RESOURCE： 表示只缓存转换过后的图片。
     *  DiskCacheStrategy.ALL ： 表示既缓存原始图片，也缓存转换过后的图片。
     *  DiskCacheStrategy.AUTOMATIC： 表示让Glide根据图片资源智能地选择使用哪一种缓存策略（默认选项）。
     *
     *
     */


    fun loadImage(context: Context, url: String, imageView: ImageView) {
        Glide.with(context).load(url).centerCrop().into(imageView)
    }

    fun loadImageFitCenter(context: Context, url: String, imageView: ImageView) {
        Glide.with(context).load(url).fitCenter().into(imageView)
    }

    /**
     * 当fragment或者activity失去焦点或者destroyed的时候，Glide会自动停止加载相关资源，确保资源不会被浪费
     */
    fun loadUrlOptions(context: Context, url: String, imageView: ImageView) {
        //取消加载
        Glide.with(context).clear(imageView)

        val options = RequestOptions()
            .diskCacheStrategy(DiskCacheStrategy.DATA)
            .placeholder(R.drawable.bg_placeholder)

        Glide.with(context)
            .load(url)
            .transition(DrawableTransitionOptions().crossFade())
            .apply(options)
            .into(imageView)
    }
}
